package jm.nj.demo12mian.demo01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

/*
* java.io.InputStreamReader流:字节流向字符的桥梁
*
* 构造方法:
* InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader
* InputStreamReader(InputStream in ,String charsetName)  创建使用指定字符集的InputStreamReader
* 参数:
*       InputStream:字符输入流,使用该流可以读取任意个是文件,根据转换查询不同的码表,转换为不同的字符
*               可以传入:FileInputStream
*       chersetName:字符串的编码表名称,GBK,utf-8;编码表名称不区分大小写
*               不指定编码表名称,使用系统默认编码(gbk)
*
* 继承Reader中的方法
*       1.读取单个字符 int read()
*       2.使用字符数组缓冲读取int read (char[] cbuf)
*
* 操作流程:
*           1.创建FileInputStream对象,绑定数据源
*           2.创建转换流InputStreamReader对象,构造方法中传入FileInputStream和指定的编码名称
*           3.使用InputSreamReader中的方法读取文件
* `          4.释放资源
*       注意:构造方法中指定的编码一定要和文件编码格式一致
* */
public class Demo02InputStreamReader {
    public static void main(String[] args) throws IOException {
       readGBK();
       //readUTF_8();
    }
/*
* 使用转换流读取UTF-8格式的文件
* */
    private static void readUTF_8() throws IOException {
        //1.创建FileInputStream对象
        FileInputStream fis = new FileInputStream("D:\\1.txt");
        InputStreamReader isr = new InputStreamReader(fis,"utf-8");

        int len = 0;
        while ((len = isr.read())!=-1){
            System.out.print((char)len);
        }

    }

    /*
* 使用转换流读取GBK格式的文件
* */
    private static void readGBK() throws IOException {
        //1.创建FileInputStream对象
        FileInputStream fis = new FileInputStream("D:\\1.txt");
        //2.创建转换流
        InputStreamReader isr = new InputStreamReader(fis,"gbk");
        //int read()

        int len = 0;
        while ((len=isr.read())!=-1){
            System.out.print((char)len);
        }
        isr.close();
    }
}
